<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="zh" xml:lang="zh" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Task: 实现设计元素</title>
<meta name="uma.type" content="Task">
<meta name="uma.name" content="implement_component">
<meta name="uma.presentationName" content="实现设计元素">
<meta name="uma.category" content="Discipline:rup_implementation_discipline:实现">
<meta name="element_type" content="activity">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../css/default.css" type="text/css">
<script src="./../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var backPath = './../../';
					var imgPath = './../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo, '', true, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top">
<div id="page-guid" value="{3293F4F7-EFCD-4476-BFF1-81AC3812B512}"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Task: 实现设计元素</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../images/task.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">此任务描述了如何实现部分设计（如类、用例实现或数据库实体）或修正一个或多个缺陷。所得到的通常是新的或修改过的源代码和数据文件，一般称为“实现元素”。</td>
</tr>
<tr>
<td>Disciplines: <a href="./../../rup/disciplines/rup_implementation_discipline_263E22DB.html" guid="_yd3ExNnmEdmO6L4XMImrsA">实现</a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Roles</th><td class="sectionTableCell" width="42%"><span class="sectionTableCellHeading">Primary Performer:
								</span>
<ul>
<li>
<a href="./../../rup/roles/rup_implementer_D145E819.html" guid="{75501BAA-0CCE-4852-A7B2-B10CA71C002A}">实现者</a>
</li>
</ul>
</td><td class="sectionTableCell"><span class="sectionTableCellHeading">Additional Performers:
								</span></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Inputs</th><td class="sectionTableCell" width="42%"><span class="sectionTableCellHeading">Mandatory:
								</span>
<ul>
<li>
<a href="./../../rup/workproducts/rup_design_model_2830034D.html" guid="{8CDAEAD4-5E84-4F50-87FD-3240ED047DE7}">设计模型</a>
</li>
<li>
<a href="./../../rup/workproducts/rup_implementation_element_49BB163E.html" guid="{E1E0DDA3-914F-4CC1-9D0A-ED4B8E8BBA89}">实现元素</a>
</li>
</ul>
<ul></ul>
</td><td class="sectionTableCell"><span class="sectionTableCellHeading">Optional:
								</span>
<ul>
<li>
<a href="./../../rup/workproducts/rup_supplementary_specification_F5ACAA22.html" guid="{B16C2941-791C-44E6-B353-354109B5C9DE}">补充规约</a>
</li>
<li>
<a href="./../../rup/workproducts/rup_test_component_9EC4F18F.html" guid="{35BD7E4D-4757-441D-B531-E9CF5BD87DE4}">可测性元素</a>
</li>
<li>
<a href="./../../rup/workproducts/rup_software_architecture_document_C367485C.html" guid="{6F49641A-ED10-47B5-9E5D-3F90A6BF3006}">软件架构文档</a>
</li>
<li>
<a href="./../../rup/workproducts/rup_data_model_65B46980.html" guid="{9DCF1723-1A21-4F48-BEDE-DBC543489682}">数据模型</a>
</li>
<li>
<a href="./../../rup/workproducts/rup_project_specific_guidelines_8DC8DA32.html" guid="{E5501201-7EE6-4243-AE91-73880FF76FC1}">特定于项目的指南</a>
</li>
</ul>
<ul></ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Outputs</th><td class="sectionTableCell" colspan="2">
<ul>
<li>
<a href="./../../rup/workproducts/rup_implementation_element_49BB163E.html" guid="{E1E0DDA3-914F-4CC1-9D0A-ED4B8E8BBA89}">实现元素</a>
</li>
<li>
<a href="./../../rup/workproducts/rup_implementation_subsystem_118747E9.html" guid="{0F629848-C19E-49AB-A6C1-C8D6A094898A}">实现子系统</a>
</li>
</ul>
<ul></ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Steps</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="sectionTableSingleCell">
<div class="stepHeading"> 准备实现</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="prepare" name="prepare"></a> 
<h5>
    了解任务／问题
</h5>
<p>
    在开始实现任务之前，实现者必须明确范围，如在工作分配和迭代计划中指定的。实现任务可侧重于实现某个特定功能（如实现设计用例实现或修正缺陷），该功能涉及实现几个设计元素，这些元素促成了该功能。实现任务也可以侧重于特定的设计元素，如设计子系统或设计类，将它实现至当前迭代所需的程度。
</p>
<h5>
    配置开发环境
</h5>
<p>
    此项任务的结果是创建或更新一个或多个文件（实现元素）。作为准备实现的一部分，实现者必须确保他或她的开发环境配置正确，以便合适的元素版本是可用的（包括要更新的元素以及编译和单元测试所需的任何其他元素）。实现者必须了解并遵循项目的配置与变更管理过程，这些过程描述了如何控制变更、为变更确定版本，以及如何交付变更用于集成。
</p>
<h5>
    分析现有实现
</h5>
<p>
    在从头开始实现类之前，请考虑是否可重用或改写现有代码。了解实现在哪些方面适合系统其余部分的架构和设计，将有助于实现者确定此类重用机会，同时确保实现适合系统的其余部分。
</p>
<h5>
    递增实现
</h5>
<p>
    建议您以递增方式实现；每天执行几次编译、链接并运行某些回归测试。了解在设计期间并不定义所有的公共操作、属性和关联是很重要的。
</p>
<p>
    当处理缺陷时，请确保已修正了问题（而不是症状）；侧重点应放在修正代码中的根本问题上。一次更改一处；因为修正故障本身是容易出错的任务，增量实现修正是很重要的，这会很容易找到任何新故障出现的位置。
</p>
<p>
    实现者必须了解并遵循任何特定于项目的实现指南，包括特定编程语言的编程指南。
</p></td>
</tr>
</table>
</div>
<div class="stepHeading"> 将设计转换到实现</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="transform" name="transform"></a> 
<p>
    可用于将设计转换到实现的技术有多种。下面是一些示例：
</p>
<ul>
    <li>
        特定于平台的可视模型可用来生成初始代码框架。通过未在设计中指定的附加代码，可以进一步阐述此代码框架。<br />
    </li>
    <li>
        可以将模型进行细化，并用来生成可执行原型。结构图（类和包图）和行为图（例如状态和活动图）都可以用来生成可执行代码。这些原型可以根据需要进一步优化。<br />
    </li>
    <li>
        模型可以细化到完全代表实现的程度。在这种情况下，与其将抽象的设计转换到代码实现，不如采用该设计并直接在模型中添加实现细节。<br />
    </li>
    <li>
        设计可能不同程度地依赖于平台。特定于平台的设计模型或代码可以通过转换来生成，这种转换应用多种规则来映射高级别抽象平台特定元素。 Object Management Group（OMG）model driven
        architecture（MDA）<a href="http://www.omg.org" target="_blank">（http://www.omg.org</a>）活动的重点即在于此。<br />
    </li>
    <li>
        也可应用标准模式，从相关的设计和实现中生成设计和代码元素。例如，标准转换模式可以应用于数据库表，创建用以访问数据表的 java 类。另一个示例是，使用 Eclipse Modeling Framework（<a href="http://www.eclipse.org/emf/" target="_blank">http://www.eclipse.org/emf/</a>）模型来生成代码，用以存储模型匹配数据；并生成用户界面实现，用以填充数据。
    </li>
</ul>
<p>
    然而，在所有情况下，某种设计抽象概念都会手工或通过应用某种自动转换而细化，并成为实现。
</p></td>
</tr>
</table>
</div>
<div class="stepHeading"> 完成实现</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="complete" name="complete"></a>
<p>
    如上一步中所述，从设计转换到实现可能会产生不同完成程度的实现结果。它有可能是完整的、可接受的实现。然而，通常需要通过大量的工作才能完成实现，例如：
</p>
<ul>
    <li>
        调整转换的结果（例如，改进性能或改进用户界面）<br />
    </li>
    <li>
        添加缺少的详细信息，例如：
        <ul>
            <li>
                完成设计中所述的操作 － 选择算法和编写代码。
            </li>
            <li>
                添加其他支持的类、操作和数据结构
            </li>
        </ul>
    </li>
</ul></td>
</tr>
</table>
</div>
<div class="stepHeading"> 评估实现</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="evaluate" name="evaluate"></a>
<p>
    在这种情况下您将验证实现是否符合目标。除了测试以外（在其他任务中描述），一些附加检查通常是很有用的：
</p>
<ul>
    <li>
        在心里通读代码。考虑将您个人在实现中所犯的常见错误记入清单，并查找这些错误。
    </li>
    <li>
        使用工具检查代码错误。例如，静态代码规则检查器，或设置为详细警告级的编译器。
    </li>
    <li>
        使用可将代码可视化表示的工具。代码可视化可以帮助实现者确定模式，如过度连接、循环依赖关系等等。
    </li>
</ul></td>
</tr>
</table>
</div>
<div class="stepHeading"> 提供设计反馈</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="feedback" name="feedback"></a>
<p>
    实现和测试设计时，将不可避免地发现那些影响设计的错误。如果设计抽象概念因为将来的维护工作或因为合同或沟通因素而保留下来，则必须更新设计。
</p>
<p>
    具体如何做要依据项目的配置与变更管理流程。通常，如果所需变更很小，并且是同一个人在设计并实现类，则不需要正式的变更请求。此人可以在设计中进行变更。
</p>
<p>
    如果所需的变更有广泛的影响（例如公共业务的变更），则可能有必要提交正式的变更请求。
</p><br />
<br /></td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">More Information</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Tool Mentors</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../rup/guidances/toolmentors/generating_elements_F992DEA8.html" guid="{EE8B53A9-8501-459E-90CC-990B25068DFA}">使用 Rational Rose 从模型生成元素</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright">Copyright &copy; 2008 版权所有 东软集团股份有限公司&nbsp; 联系邮箱:<a href="mailto:tcoe@neusoft.com">tcoe@neusoft.com</a></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script type="text/javascript" language="JavaScript">
				contentPage.onload();
			</script>
</html>
